package top.yehot.cmmu.mybatis.utils;

import java.util.Objects;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import top.yehot.cmmu.mybatis.model.PageQuery;

/**
 * MybatisPlus分页通用类
 * 
 * @author lquan
 * @date 2022-9-10 11:45:35
 */
public class PageUtil {

	/**
	 * 根据分页查询条件生成分页对象
	 *
	 * @param pageQuery 分页查询条件
	 * @return 分页对象
	 */
	public static <T> Page<T> of(PageQuery pageQuery) {
		return of(pageQuery.getPgCt(), pageQuery.getPgSz());
	}

	/**
	 * 根据分页查询条件生成分页对象
	 *
	 * @param pageQuery                分页查询条件
	 * @param searchCountOnlyFirstPage true:只有第一页查询总条数; false所有页都查询总条数
	 * @return 分页对象
	 */
	public static <T> Page<T> of(PageQuery pageQuery, boolean searchCountOnlyFirstPage) {
		Integer pgCt = pageQuery.getPgCt();
		Integer pgSz = pageQuery.getPgSz();
		if (searchCountOnlyFirstPage) {
			return of(pgCt, pgSz, Objects.equals(pgCt, 1));
		}
		return of(pgCt, pgSz);
	}

	/**
	 * 根据当前页、条数生成分页对象(默认查询总条数)
	 *
	 * @param pgCt 当前页
	 * @param pgSz 条数
	 * @return 分页对象
	 */
	public static <T> Page<T> of(long pgCt, long pgSz) {
		return of(pgCt, pgSz, true);
	}

	/**
	 * 根据当前页、条数、是否查询总数生成分页对象
	 *
	 * @param pgCt        当前页
	 * @param pgSz        条数
	 * @param searchCount 是否查询总数
	 * @return 分页对象
	 */
	public static <T> Page<T> of(long pgCt, long pgSz, boolean searchCount) {
		return new Page<>(pgCt, pgSz, searchCount);
	}

}
